<?php

namespace app\api\controller;

use app\api\model\OauthRecite AS OauthReciteModel;
use app\api\model\LangClassRecite;
use app\api\validate\Page;
use app\api\model\OauthOrderClass;

class OauthRecite extends Base
{
    /**
     * 错题本 或者 收藏本 列表
     * @param int $type 收藏本1 错题本2
     * @return array
     * @throws \think\Exception\DbException
     */
    public function index($type)
    {
        // 班级ID
        $classId = input('classId');
        // 课程类型
        $courseType = input('courseType');
        // 背单词 或者 背句子
        $reciteType = input('reciteType');
        $page = $data['page'] = input('page') ? input('page') : 1;
        $size = $data['size'] = input('size') ? input('size') : $this->pageSize;

        if (empty($classId) || empty($courseType) || empty($type) || empty($reciteType)) {
            return self::sendResult(100);
        }

        // 检测变量
        $validate = new Page();
        if (!$validate->check($data)) {
            return self::sendResult(102, [], $validate->getError());
        }

        $typeArr = OauthReciteModel::attributes('type');
        if (!isset($typeArr[$type])) {
            return self::sendResult(102, [], '类型错误');
        }

        $reciteTypeArr = LangClassRecite::attributes('type');
        if (!isset($reciteTypeArr[$reciteType])) {
            return self::sendResult(102, [], '背诵类型错误');
        }

        $oauthId = $this->oauthInfo['id'];
        // 判断是否已经购买
        $buyLog = OauthOrderClass::getOneByClass($oauthId, $classId);
        if (empty($buyLog)) {
            return self::sendResult(109);
        }

        // 背诵列表
        $model = OauthReciteModel::getListByType($oauthId, $type, $reciteType, $classId, $courseType, $page, $size);

        return self::sendResult(self::$okCode, $model);
    }

    /**
     * 批量添加记录
     * @return array
     * @throws \Exception
     */
    public function addBatch()
    {
        $ids = input('reciteIds');
        
        // 收藏本1 错题本2
        $type = input('type');
        
        if (empty($ids) || empty($type)) {
            return self::sendResult(100);
        }
        
        if (!is_array($ids)) {
            return self::sendResult(102);
        }

        $ids = array_unique(array_filter($ids));
        
        if (empty($ids)) {
            return self::sendResult(100);
        }

        $typeArr = OauthReciteModel::attributes('type');
        if (!isset($typeArr[$type])) {
            return self::sendResult(102, [], '类型错误');
        }

        // 获取班级
        $recites = LangClassRecite::getByIds($ids);
        $class = array_unique(array_values($recites));
        if (count($class) != 1) {
            return self::sendResult(136);
        }
        $classId = $class[0];

        $oauthId = $this->oauthInfo['id'];
        // 判断是否购买
        $one = OauthOrderClass::getOneByClass($oauthId, $classId);
        if (empty($one)) {
            return self::sendResult(109);
        }

        // 实际收藏数据
        $ids = array_keys($recites);

        // 批量插入
        OauthReciteModel::addBatch($oauthId, $type, $ids);

        return self::sendResult(self::$okCode);
    }

    /**
     * 背单词 或者 背句子 详情
     * @param $id
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function read($id)
    {
        if ($id <= 0) {
            return self::sendResult(102);
        }
        $oauthId = $this->oauthInfo['id'];
        $model = OauthReciteModel::getOne($id, $oauthId);
        return self::sendResult(self::$okCode, $model);
    }

    /**
     * 移除错题本 或者 收藏本 一条记录
     * @param $reciteId
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function delete($reciteId)
    {
        // 收藏本1 错题本2
        $type = input('type');

        if ($reciteId <= 0) {
            return self::sendResult(102);
        }

        if (empty($type)) {
            return self::sendResult(100);
        }

        $typeArr = OauthReciteModel::attributes('type');
        if (!isset($typeArr[$type])) {
            return self::sendResult(102, [], '类型错误');
        }

        $oauthId = $this->oauthInfo['id'];
        $model = OauthReciteModel::getOneBy($type, $oauthId, $reciteId);
        if (empty($model)) {
            return self::sendResult(102, [], '数据不存在');
        }

        $id = $model['id'];
        // 删除记录
        OauthReciteModel::deleteOne($id);

        return self::sendResult(self::$okCode, [], '移除成功');
    }
}